在 Hive 中，**UDF（User-Defined Function）** 是用户自定义函数，用于扩展 Hive 的功能。你可以通过 Java 编写 UDF，并在 Hive 中使用它。

以下是一个简单的 Hive UDF 示例，用于将字符串转换为大写。

---

### **1. 环境准备**
确保你已经安装了以下工具：
- JDK 8+
- Hadoop 和 Hive
- Maven

---

### **2. 创建 Maven 项目**
在 `pom.xml` 中添加 Hive 依赖：
```xml
<dependencies>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>3.1.2</version>
    </dependency>
</dependencies>
```

---

### **3. 编写 UDF 代码**
创建一个 Java 类，继承 `org.apache.hadoop.hive.ql.exec.UDF`，并实现 `evaluate` 方法。

#### **3.1 UDF 类**
```java
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class ToUpperUDF extends UDF {
    // 实现 evaluate 方法
    public Text evaluate(Text input) {
        if (input == null) {
            return null;
        }
        // 将输入字符串转换为大写
        return new Text(input.toString().toUpperCase());
    }
}
```

---

### **4. 打包 UDF**
使用 Maven 打包项目：
```bash
mvn clean package
```
生成的 JAR 文件（如 `udf-example-1.0.jar`）将包含你的 UDF 类。

---

### **5. 在 Hive 中使用 UDF**
1. 将 JAR 文件上传到 HDFS 或本地路径。
2. 在 Hive 中注册 UDF：
   ```sql
   ADD JAR /path/to/udf-example-1.0.jar;
   CREATE TEMPORARY FUNCTION to_upper AS 'com.example.ToUpperUDF';
   ```
3. 使用 UDF：
   ```sql
   SELECT to_upper('hello world');
   ```

---

### **6. 示例输出**
如果输入为 `'hello world'`，输出如下：
```
HELLO WORLD
```

---

### **7. 代码说明**
- **UDF 类**：继承 `UDF` 并实现 `evaluate` 方法。
- **evaluate 方法**：接受输入参数并返回处理后的结果。
- **ADD JAR**：将包含 UDF 的 JAR 文件添加到 Hive 中。
- **CREATE TEMPORARY FUNCTION**：注册 UDF 并指定别名。

---

### **8. 扩展**
- **多参数 UDF**：在 `evaluate` 方法中定义多个参数。
   ```java
   public Text evaluate(Text input1, Text input2) {
       // 处理逻辑
   }
   ```
- **复杂数据类型**：支持 `Array`、`Map` 等复杂数据类型。
- **永久 UDF**：将 UDF 注册为永久函数，避免每次会话都重新注册。

---

### **9. 注意事项**
- 确保 JAR 文件路径正确。
- 如果 UDF 依赖其他库，需要将所有依赖打包到一个 JAR 文件中（使用 `maven-assembly-plugin` 或 `maven-shade-plugin`）。
- 在分布式环境中，确保所有节点都能访问 JAR 文件。

---

### **10. 完整示例**
假设你的项目结构如下：
```
src/main/java/com/example/ToUpperUDF.java
pom.xml
```

打包后，使用以下步骤在 Hive 中测试：
1. 上传 JAR 文件：
   ```bash
   hdfs dfs -put udf-example-1.0.jar /user/hive/udfs/
   ```
2. 在 Hive 中注册 UDF：
   ```sql
   ADD JAR hdfs:///user/hive/udfs/udf-example-1.0.jar;
   CREATE TEMPORARY FUNCTION to_upper AS 'com.example.ToUpperUDF';
   ```
3. 使用 UDF：
   ```sql
   SELECT to_upper('hello world');
   ```

---

希望这个示例对你有帮助！如果有其他问题，请随时提问。